/**
 * @func 挂在事件
 * @params handler {type：类型,cb：回调函数}   
 * @msg 已经挂载就不需要从新挂在了
 *      设置标识，并将处理的方法放置到handlers中，{ xhr: [ funtion ] }
 *      已经绑定就不需要重复绑定了
 * */
import { getFlag, setFlag } from '../../utils/global'
import { rewriteEvents } from './resetEvents'
import { EVENTTYPES } from '../../common/constant'
import { handlers } from './tools'
function rewriteHandler(handler) {
    switch (handler.type) {
        // 捕获错误
        case EVENTTYPES.ERROR:
            rewriteEvents.listenError();
            break;
        // 监听click事件
        case EVENTTYPES.CLICK:
            rewriteEvents.domReplace();
            break;

        // 监听history模式路由的变化
        case EVENTTYPES.HISTORY:
            rewriteEvents.historyReplace();
            break;
        // 监听hashchange
        case EVENTTYPES.HASHCHANGE:
            rewriteEvents.listenHashchange();
            break;
        // 重写XMLHttpRequest
        case EVENTTYPES.XHR:
            rewriteEvents.xhrReplace();
            break;
        // 重写fetch
        case EVENTTYPES.FETCH:
            rewriteEvents.fetchReplace();
            break;
        // 添加handleUnhandleRejection事件 promise
        case EVENTTYPES.UNHANDLEDREJECTION:
            rewriteEvents.unhandledrejectionReplace();
            break;

        // 白屏检测
        case EVENTTYPES.WHITESCREEN:
            rewriteEvents.whiteScreen();
            break;
        default:
            break;
    }
}
export function addEventHadnler(handler) {
    // 注册过该类型的事件了
    if (!handler || getFlag(handler.type)) return
    setFlag(handler.type, true)
    handlers[handler.type] = handlers[handler.type] || [];
    handlers[handler.type]?.push(handler.cb);
    rewriteHandler(handler);
}